Autogenerated HTML docs for v1.8.0-251-g3a189 
diff --git a/howto/setup-git-server-over-http.html b/howto/setup-git-server-over-http.html new file mode 100644 index 0000000..f461101 --- /dev/null +++ b/howto/setup-git-server-over-http.html 
@@ -0,0 +1,872 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  +<head>  +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  +<meta name="generator" content="AsciiDoc 8.5.2" />  +<title>How to setup git server over http</title>  +<style type="text/css">  +/* Debug borders */  +p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {  +/*  + border: 1px solid red;  +*/  +}  +  +body {  + margin: 1em 5% 1em 5%;  +}  +  +a {  + color: blue;  + text-decoration: underline;  +}  +a:visited {  + color: fuchsia;  +}  +  +em {  + font-style: italic;  + color: navy;  +}  +  +strong {  + font-weight: bold;  + color: #083194;  +}  +  +tt {  + color: navy;  +}  +  +h1, h2, h3, h4, h5, h6 {  + color: #527bbd;  + font-family: sans-serif;  + margin-top: 1.2em;  + margin-bottom: 0.5em;  + line-height: 1.3;  +}  +  +h1, h2, h3 {  + border-bottom: 2px solid silver;  +}  +h2 {  + padding-top: 0.5em;  +}  +h3 {  + float: left;  +}  +h3 + * {  + clear: left;  +}  +  +div.sectionbody {  + font-family: serif;  + margin-left: 0;  +}  +  +hr {  + border: 1px solid silver;  +}  +  +p {  + margin-top: 0.5em;  + margin-bottom: 0.5em;  +}  +  +ul, ol, li > p {  + margin-top: 0;  +}  +  +pre {  + padding: 0;  + margin: 0;  +}  +  +span#author {  + color: #527bbd;  + font-family: sans-serif;  + font-weight: bold;  + font-size: 1.1em;  +}  +span#email {  +}  +span#revnumber, span#revdate, span#revremark {  + font-family: sans-serif;  +}  +  +div#footer {  + font-family: sans-serif;  + font-size: small;  + border-top: 2px solid silver;  + padding-top: 0.5em;  + margin-top: 4.0em;  +}  +div#footer-text {  + float: left;  + padding-bottom: 0.5em;  +}  +div#footer-badges {  + float: right;  + padding-bottom: 0.5em;  +}  +  +div#preamble {  + margin-top: 1.5em;  + margin-bottom: 1.5em;  +}  +div.tableblock, div.imageblock, div.exampleblock, div.verseblock,  +div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,  +div.admonitionblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;  +}  +div.admonitionblock {  + margin-top: 2.0em;  + margin-bottom: 2.0em;  + margin-right: 10%;  + color: #606060;  +}  +  +div.content { /* Block element content. */  + padding: 0;  +}  +  +/* Block element titles. */  +div.title, caption.title {  + color: #527bbd;  + font-family: sans-serif;  + font-weight: bold;  + text-align: left;  + margin-top: 1.0em;  + margin-bottom: 0.5em;  +}  +div.title + * {  + margin-top: 0;  +}  +  +td div.title:first-child {  + margin-top: 0.0em;  +}  +div.content div.title:first-child {  + margin-top: 0.0em;  +}  +div.content + div.title {  + margin-top: 0.0em;  +}  +  +div.sidebarblock > div.content {  + background: #ffffee;  + border: 1px solid silver;  + padding: 0.5em;  +}  +  +div.listingblock > div.content {  + border: 1px solid silver;  + background: #f4f4f4;  + padding: 0.5em;  +}  +  +div.quoteblock, div.verseblock {  + padding-left: 1.0em;  + margin-left: 1.0em;  + margin-right: 10%;  + border-left: 5px solid #dddddd;  + color: #777777;  +}  +  +div.quoteblock > div.attribution {  + padding-top: 0.5em;  + text-align: right;  +}  +  +div.verseblock > div.content {  + white-space: pre;  +}  +div.verseblock > div.attribution {  + padding-top: 0.75em;  + text-align: left;  +}  +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */  +div.verseblock + div.attribution {  + text-align: left;  +}  +  +div.admonitionblock .icon {  + vertical-align: top;  + font-size: 1.1em;  + font-weight: bold;  + text-decoration: underline;  + color: #527bbd;  + padding-right: 0.5em;  +}  +div.admonitionblock td.content {  + padding-left: 0.5em;  + border-left: 3px solid #dddddd;  +}  +  +div.exampleblock > div.content {  + border-left: 3px solid #dddddd;  + padding-left: 0.5em;  +}  +  +div.imageblock div.content { padding-left: 0; }  +span.image img { border-style: none; }  +a.image:visited { color: white; }  +  +dl {  + margin-top: 0.8em;  + margin-bottom: 0.8em;  +}  +dt {  + margin-top: 0.5em;  + margin-bottom: 0;  + font-style: normal;  + color: navy;  +}  +dd > *:first-child {  + margin-top: 0.1em;  +}  +  +ul, ol {  + list-style-position: outside;  +}  +ol.arabic {  + list-style-type: decimal;  +}  +ol.loweralpha {  + list-style-type: lower-alpha;  +}  +ol.upperalpha {  + list-style-type: upper-alpha;  +}  +ol.lowerroman {  + list-style-type: lower-roman;  +}  +ol.upperroman {  + list-style-type: upper-roman;  +}  +  +div.compact ul, div.compact ol,  +div.compact p, div.compact p,  +div.compact div, div.compact div {  + margin-top: 0.1em;  + margin-bottom: 0.1em;  +}  +  +div.tableblock > table {  + border: 3px solid #527bbd;  +}  +thead, p.table.header {  + font-family: sans-serif;  + font-weight: bold;  +}  +tfoot {  + font-weight: bold;  +}  +td > div.verse {  + white-space: pre;  +}  +p.table {  + margin-top: 0;  +}  +/* Because the table frame attribute is overriden by CSS in most browsers. */  +div.tableblock > table[frame="void"] {  + border-style: none;  +}  +div.tableblock > table[frame="hsides"] {  + border-left-style: none;  + border-right-style: none;  +}  +div.tableblock > table[frame="vsides"] {  + border-top-style: none;  + border-bottom-style: none;  +}  +  +  +div.hdlist {  + margin-top: 0.8em;  + margin-bottom: 0.8em;  +}  +div.hdlist tr {  + padding-bottom: 15px;  +}  +dt.hdlist1.strong, td.hdlist1.strong {  + font-weight: bold;  +}  +td.hdlist1 {  + vertical-align: top;  + font-style: normal;  + padding-right: 0.8em;  + color: navy;  +}  +td.hdlist2 {  + vertical-align: top;  +}  +div.hdlist.compact tr {  + margin: 0;  + padding-bottom: 0;  +}  +  +.comment {  + background: yellow;  +}  +  +.footnote, .footnoteref {  + font-size: 0.8em;  +}  +  +span.footnote, span.footnoteref {  + vertical-align: super;  +}  +  +#footnotes {  + margin: 20px 0 20px 0;  + padding: 7px 0 0 0;  +}  +  +#footnotes div.footnote {  + margin: 0 0 5px 0;  +}  +  +#footnotes hr {  + border: none;  + border-top: 1px solid silver;  + height: 1px;  + text-align: left;  + margin-left: 0;  + width: 20%;  + min-width: 100px;  +}  +  +  +@media print {  + div#footer-badges { display: none; }  +}  +  +div#toc {  + margin-bottom: 2.5em;  +}  +  +div#toctitle {  + color: #527bbd;  + font-family: sans-serif;  + font-size: 1.1em;  + font-weight: bold;  + margin-top: 1.0em;  + margin-bottom: 0.1em;  +}  +  +div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {  + margin-top: 0;  + margin-bottom: 0;  +}  +div.toclevel2 {  + margin-left: 2em;  + font-size: 0.9em;  +}  +div.toclevel3 {  + margin-left: 4em;  + font-size: 0.9em;  +}  +div.toclevel4 {  + margin-left: 6em;  + font-size: 0.9em;  +}  +/* Workarounds for IE6's broken and incomplete CSS2. */  +  +div.sidebar-content {  + background: #ffffee;  + border: 1px solid silver;  + padding: 0.5em;  +}  +div.sidebar-title, div.image-title {  + color: #527bbd;  + font-family: sans-serif;  + font-weight: bold;  + margin-top: 0.0em;  + margin-bottom: 0.5em;  +}  +  +div.listingblock div.content {  + border: 1px solid silver;  + background: #f4f4f4;  + padding: 0.5em;  +}  +  +div.quoteblock-attribution {  + padding-top: 0.5em;  + text-align: right;  +}  +  +div.verseblock-content {  + white-space: pre;  +}  +div.verseblock-attribution {  + padding-top: 0.75em;  + text-align: left;  +}  +  +div.exampleblock-content {  + border-left: 3px solid #dddddd;  + padding-left: 0.5em;  +}  +  +/* IE6 sets dynamically generated links as visited. */  +div#toc a:visited { color: blue; }  +</style>  +<script type="text/javascript">  +/*<![CDATA[*/  +window.onload = function(){asciidoc.footnotes();}  +var asciidoc = { // Namespace.  +  +/////////////////////////////////////////////////////////////////////  +// Table Of Contents generator  +/////////////////////////////////////////////////////////////////////  +  +/* Author: Mihai Bazon, September 2002  + * http://students.infoiasi.ro/~mishoo  + *  + * Table Of Content generator  + * Version: 0.4  + *  + * Feel free to use this script under the terms of the GNU General Public  + * License, as long as you do not remove or alter this notice.  + */  +  + /* modified by Troy D. Hanson, September 2006. License: GPL */  + /* modified by Stuart Rackham, 2006, 2009. License: GPL */  +  +// toclevels = 1..4.  +toc: function (toclevels) {  +  + function getText(el) {  + var text = "";  + for (var i = el.firstChild; i != null; i = i.nextSibling) {  + if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.  + text += i.data;  + else if (i.firstChild != null)  + text += getText(i);  + }  + return text;  + }  +  + function TocEntry(el, text, toclevel) {  + this.element = el;  + this.text = text;  + this.toclevel = toclevel;  + }  +  + function tocEntries(el, toclevels) {  + var result = new Array;  + var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');  + // Function that scans the DOM tree for header elements (the DOM2  + // nodeIterator API would be a better technique but not supported by all  + // browsers).  + var iterate = function (el) {  + for (var i = el.firstChild; i != null; i = i.nextSibling) {  + if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {  + var mo = re.exec(i.tagName);  + if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {  + result[result.length] = new TocEntry(i, getText(i), mo[1]-1);  + }  + iterate(i);  + }  + }  + }  + iterate(el);  + return result;  + }  +  + var toc = document.getElementById("toc");  + var entries = tocEntries(document.getElementById("content"), toclevels);  + for (var i = 0; i < entries.length; ++i) {  + var entry = entries[i];  + if (entry.element.id == "")  + entry.element.id = "_toc_" + i;  + var a = document.createElement("a");  + a.href = "#" + entry.element.id;  + a.appendChild(document.createTextNode(entry.text));  + var div = document.createElement("div");  + div.appendChild(a);  + div.className = "toclevel" + entry.toclevel;  + toc.appendChild(div);  + }  + if (entries.length == 0)  + toc.parentNode.removeChild(toc);  +},  +  +  +/////////////////////////////////////////////////////////////////////  +// Footnotes generator  +/////////////////////////////////////////////////////////////////////  +  +/* Based on footnote generation code from:  + * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html  + */  +  +footnotes: function () {  + var cont = document.getElementById("content");  + var noteholder = document.getElementById("footnotes");  + var spans = cont.getElementsByTagName("span");  + var refs = {};  + var n = 0;  + for (i=0; i<spans.length; i++) {  + if (spans[i].className == "footnote") {  + n++;  + // Use [\s\S] in place of . so multi-line matches work.  + // Because JavaScript has no s (dotall) regex flag.  + note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];  + noteholder.innerHTML +=  + "<div class='footnote' id='_footnote_" + n + "'>" +  + "<a href='#_footnoteref_" + n + "' title='Return to text'>" +  + n + "</a>. " + note + "</div>";  + spans[i].innerHTML =  + "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +  + "' title='View footnote' class='footnote'>" + n + "</a>]";  + var id =spans[i].getAttribute("id");  + if (id != null) refs["#"+id] = n;  + }  + }  + if (n == 0)  + noteholder.parentNode.removeChild(noteholder);  + else {  + // Process footnoterefs.  + for (i=0; i<spans.length; i++) {  + if (spans[i].className == "footnoteref") {  + var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");  + href = href.match(/#.*/)[0]; // Because IE return full URL.  + n = refs[href];  + spans[i].innerHTML =  + "[<a href='#_footnote_" + n +  + "' title='View footnote' class='footnote'>" + n + "</a>]";  + }  + }  + }  +}  +  +}  +/*]]>*/  +</script>  +</head>  +<body>  +<div id="header">  +<h1>How to setup git server over http</h1>  +</div>  +<div id="content">  +<div id="preamble">  +<div class="sectionbody">  +<div class="paragraph"><p>Since Apache is one of those packages people like to compile  +themselves while others prefer the bureaucrat&#8217;s dream Debian, it is  +impossible to give guidelines which will work for everyone. Just send  +some feedback to the mailing list at <a href="mailto:git@vger.kernel.org">git@vger.kernel.org</a> to get this  +document tailored to your favorite distro.</p></div>  +<div class="paragraph"><p>What&#8217;s needed:</p></div>  +<div class="ulist"><ul>  +<li>  +<p>  +Have an Apache web-server  +</p>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian:  + $ apt-get install apache2  + To get apache2 by default started,  + edit /etc/default/apache2 and set NO_START=0</tt></pre>  +</div></div>  +</li>  +<li>  +<p>  +can edit the configuration of it.  +</p>  +<div class="literalblock">  +<div class="content">  +<pre><tt>This could be found under /etc/httpd, or refer to your Apache documentation.</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian: this means being able to edit files under /etc/apache2</tt></pre>  +</div></div>  +</li>  +<li>  +<p>  +can restart it.  +</p>  +<div class="literalblock">  +<div class="content">  +<pre><tt>'apachectl --graceful' might do. If it doesn't, just stop and  +restart apache. Be warning that active connections to your server  +might be aborted by this.</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian:  + $ /etc/init.d/apache2 restart  +or  + $ /etc/init.d/apache2 force-reload  + (which seems to do the same)  +This adds symlinks from the /etc/apache2/mods-enabled to  +/etc/apache2/mods-available.</tt></pre>  +</div></div>  +</li>  +<li>  +<p>  +have permissions to chown a directory  +</p>  +</li>  +<li>  +<p>  +have git installed on the client, and  +</p>  +</li>  +<li>  +<p>  +either have git installed on the server or have a webdav client on  + the client.  +</p>  +</li>  +</ul></div>  +<div class="paragraph"><p>In effect, this means you&#8217;re going to be root, or that you&#8217;re using a  +preconfigured WebDAV server.</p></div>  +</div>  +</div>  +<h2 id="_step_1_setup_a_bare_git_repository">Step 1: setup a bare GIT repository</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>At the time of writing, git-http-push cannot remotely create a GIT  +repository. So we have to do that at the server side with git. Another  +option is to generate an empty bare repository at the client and copy  +it to the server with a WebDAV client (which is the only option if Git  +is not installed on the server).</p></div>  +<div class="paragraph"><p>Create the directory under the DocumentRoot of the directories served  +by Apache. As an example we take /usr/local/apache2, but try "grep  +DocumentRoot /where/ever/httpd.conf" to find your root:</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>$ cd /usr/local/apache/htdocs  +$ mkdir my-new-repo.git</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian:</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>$ cd /var/www  +$ mkdir my-new-repo.git</tt></pre>  +</div></div>  +<div class="paragraph"><p>Initialize a bare repository</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>$ cd my-new-repo.git  +$ git --bare init</tt></pre>  +</div></div>  +<div class="paragraph"><p>Change the ownership to your web-server&#8217;s credentials. Use "grep <sup>User  +httpd.conf" and "grep </sup>Group httpd.conf" to find out:</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>$ chown -R www.www .</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian:</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>$ chown -R www-data.www-data .</tt></pre>  +</div></div>  +<div class="paragraph"><p>If you do not know which user Apache runs as, you can alternatively do  +a "chmod -R a+w .", inspect the files which are created later on, and  +set the permissions appropriately.</p></div>  +<div class="paragraph"><p>Restart apache2, and check whether <a href="http://server/my-new-repo.git">http://server/my-new-repo.git</a> gives  +a directory listing. If not, check whether apache started up  +successfully.</p></div>  +</div>  +<h2 id="_step_2_enable_dav_on_this_repository">Step 2: enable DAV on this repository</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>First make sure the dav_module is loaded. For this, insert in httpd.conf:</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>LoadModule dav_module libexec/httpd/libdav.so  +AddModule mod_dav.c</tt></pre>  +</div></div>  +<div class="paragraph"><p>Also make sure that this line exists which is the file used for  +locking DAV operations:</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>DAVLockDB "/usr/local/apache2/temp/DAV.lock"</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian these steps can be performed with:</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>Enable the dav and dav_fs modules of apache:  +$ a2enmod dav_fs  +(just to be sure. dav_fs might be unneeded, I don't know)  +$ a2enmod dav  +The DAV lock is located in /etc/apache2/mods-available/dav_fs.conf:  + DAVLockDB /var/lock/apache2/DAVLock</tt></pre>  +</div></div>  +<div class="paragraph"><p>Of course, it can point somewhere else, but the string is actually just a  +prefix in some Apache configurations, and therefore the <em>directory</em> has to  +be writable by the user Apache runs as.</p></div>  +<div class="paragraph"><p>Then, add something like this to your httpd.conf</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>&lt;Location /my-new-repo.git&gt;  + DAV on  + AuthType Basic  + AuthName "Git"  + AuthUserFile /usr/local/apache2/conf/passwd.git  + Require valid-user  +&lt;/Location&gt;</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian:  + Create (or add to) /etc/apache2/conf.d/git.conf :</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>&lt;Location /my-new-repo.git&gt;  + DAV on  + AuthType Basic  + AuthName "Git"  + AuthUserFile /etc/apache2/passwd.git  + Require valid-user  +&lt;/Location&gt;</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>Debian automatically reads all files under /etc/apache2/conf.d.</tt></pre>  +</div></div>  +<div class="paragraph"><p>The password file can be somewhere else, but it has to be readable by  +Apache and preferably not readable by the world.</p></div>  +<div class="paragraph"><p>Create this file by  + $ htpasswd -c /usr/local/apache2/conf/passwd.git &lt;user&gt;</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian:  + $ htpasswd -c /etc/apache2/passwd.git &lt;user&gt;</tt></pre>  +</div></div>  +<div class="paragraph"><p>You will be asked a password, and the file is created. Subsequent calls  +to htpasswd should omit the <em>-c</em> option, since you want to append to the  +existing file.</p></div>  +<div class="paragraph"><p>You need to restart Apache.</p></div>  +<div class="paragraph"><p>Now go to <a href="http://&lt;username&gt;@&lt;servername&gt;/my-new-repo.git">http://&lt;username&gt;@&lt;servername&gt;/my-new-repo.git</a> in your  +browser to check whether it asks for a password and accepts the right  +password.</p></div>  +<div class="paragraph"><p>On Debian:</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>To test the WebDAV part, do:</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>$ apt-get install litmus  +$ litmus http://&lt;servername&gt;/my-new-repo.git &lt;username&gt; &lt;password&gt;</tt></pre>  +</div></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>Most tests should pass.</tt></pre>  +</div></div>  +<div class="paragraph"><p>A command line tool to test WebDAV is cadaver. If you prefer GUIs, for  +example, konqueror can open WebDAV URLs as "webdav://&#8230;" or  +"webdavs://&#8230;".</p></div>  +<div class="paragraph"><p>If you&#8217;re into Windows, from XP onwards Internet Explorer supports  +WebDAV. For this, do Internet Explorer &#8594; Open Location &#8594;  +<a href="http://&lt;servername&gt;/my-new-repo.git">http://&lt;servername&gt;/my-new-repo.git</a> [x] Open as webfolder &#8594; login .</p></div>  +</div>  +<h2 id="_step_3_setup_the_client">Step 3: setup the client</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>Make sure that you have HTTP support, i.e. your git was built with  +libcurl (version more recent than 7.10). The command <em>git http-push</em> with  +no argument should display a usage message.</p></div>  +<div class="paragraph"><p>Then, add the following to your $HOME/.netrc (you can do without, but will be  +asked to input your password a <em>lot</em> of times):</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>machine &lt;servername&gt;  +login &lt;username&gt;  +password &lt;password&gt;</tt></pre>  +</div></div>  +<div class="paragraph"><p>&#8230;and set permissions:  + chmod 600 ~/.netrc</p></div>  +<div class="paragraph"><p>If you want to access the web-server by its IP, you have to type that in,  +instead of the server name.</p></div>  +<div class="paragraph"><p>To check whether all is OK, do:</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>curl --netrc --location -v http://&lt;username&gt;@&lt;servername&gt;/my-new-repo.git/HEAD</tt></pre>  +</div></div>  +<div class="paragraph"><p>&#8230;this should give something like <em>ref: refs/heads/master</em>, which is  +the content of the file HEAD on the server.</p></div>  +<div class="paragraph"><p>Now, add the remote in your existing repository which contains the project  +you want to export:</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>$ git-config remote.upload.url \  + http://&lt;username&gt;@&lt;servername&gt;/my-new-repo.git/</tt></pre>  +</div></div>  +<div class="paragraph"><p>It is important to put the last <em>/</em>; Without it, the server will send  +a redirect which git-http-push does not (yet) understand, and git-http-push  +will repeat the request infinitely.</p></div>  +</div>  +<h2 id="_step_4_make_the_initial_push">Step 4: make the initial push</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>From your client repository, do</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>$ git push upload master</tt></pre>  +</div></div>  +<div class="paragraph"><p>This pushes branch <em>master</em> (which is assumed to be the branch you  +want to export) to repository called <em>upload</em>, which we previously  +defined with git-config.</p></div>  +</div>  +<h2 id="_using_a_proxy">Using a proxy:</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>If you have to access the WebDAV server from behind an HTTP(S) proxy,  +set the variable <em>all_proxy</em> to <em>http://proxy-host.com:port</em>, or  +<em>http://login-on-proxy:passwd-on-proxy@proxy-host.com:port</em>. See <em>man  +curl</em> for details.</p></div>  +</div>  +<h2 id="_troubleshooting">Troubleshooting:</h2>  +<div class="sectionbody">  +<div class="paragraph"><p>If git-http-push says</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>Error: no DAV locking support on remote repo http://...</tt></pre>  +</div></div>  +<div class="paragraph"><p>then it means the web-server did not accept your authentication. Make sure  +that the user name and password matches in httpd.conf, .netrc and the URL  +you are uploading to.</p></div>  +<div class="paragraph"><p>If git-http-push shows you an error (22/502) when trying to MOVE a blob,  +it means that your web-server somehow does not recognize its name in the  +request; This can happen when you start Apache, but then disable the  +network interface. A simple restart of Apache helps.</p></div>  +<div class="paragraph"><p>Errors like (22/502) are of format (curl error code/http error  +code). So (22/404) means something like <em>not found</em> at the server.</p></div>  +<div class="paragraph"><p>Reading /usr/local/apache2/logs/error_log is often helpful.</p></div>  +<div class="literalblock">  +<div class="content">  +<pre><tt>On Debian: Read /var/log/apache2/error.log instead.</tt></pre>  +</div></div>  +<div class="paragraph"><p>If you access HTTPS locations, git may fail verifying the SSL  +certificate (this is return code 60). Setting http.sslVerify=false can  +help diagnosing the problem, but removes security checks.</p></div>  +<div class="paragraph"><p>Debian References: <a href="http://www.debian-administration.org/articles/285">http://www.debian-administration.org/articles/285</a></p></div>  +<div class="paragraph"><p>Authors  + Johannes Schindelin &lt;<a href="mailto:Johannes.Schindelin@gmx.de">Johannes.Schindelin@gmx.de</a>&gt;  + Rutger Nijlunsing &lt;<a href="mailto:git@wingding.demon.nl">git@wingding.demon.nl</a>&gt;  + Matthieu Moy &lt;<a href="mailto:Matthieu.Moy@imag.fr">Matthieu.Moy@imag.fr</a>&gt;</p></div>  +</div>  +</div>  +<div id="footnotes"><hr /></div>  +<div id="footer">  +<div id="footer-text">  +Last updated 2012-11-20 13:06:06 PDT  +</div>  +</div>  +</body>  +</html>